/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package accountmanager;

import accountmanager.controller.GerenciaClientes;
import accountmanager.controller.GerenciaContas;
import accountmanager.dao.Cliente;
import accountmanager.dao.Conta;
import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author aluno653
 */
public class Main {

    /**
     * @param args the command line arguments
     *    1. 
     *    2. 
     */
    public static void main(String[] args) {
        try {
            GerenciaClientes gerenciaClientes = new GerenciaClientes();
            GerenciaContas gerenciaContas = new GerenciaContas();
            BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
            String text = "";
            imprimirOpcoes();
            while (!"10".equals(text)) {
                text = buffer.readLine();
                if ("1".equals(text)) {
                    System.out.println(cadastraCliente(gerenciaClientes, buffer));
                    imprimirOpcoes();
                } else if ("2".equals(text)) {
                    System.out.println(cadastraConta(gerenciaContas,
                            gerenciaClientes, buffer));
                    imprimirOpcoes();
                } else if ("3".equals(text)) {
//                    System.out.println(cadastraConta(gerenciaContas,
//                            gerenciaClientes, buffer));
//                    imprimirOpcoes();
                } else if ("4".equals(text)) {
                    listaClientes(gerenciaClientes);
                    imprimirOpcoes();
                } else if ("5".equals(text)) {
                    listaContas(gerenciaContas);
                    imprimirOpcoes();
                } else if ("6".equals(text)) {
                    System.out.println(
                            efetuarDeposito(gerenciaContas, buffer));
                    imprimirOpcoes();
                } else if ("7".equals(text)) {
                    System.out.println(efetuarSaque(gerenciaContas, buffer));
                    imprimirOpcoes();
                } else if ("8".equals(text)) {
                    listarContaCliente(gerenciaContas, buffer);
                    imprimirOpcoes();
                } else if ("9".equals(text)) {
                    imprimirOpcoes();
                } else if ("10".equals(text)) {
                    System.out.println("Obrigado por usar os serviços do JavaBank!!");
                    return;
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    public static void imprimirOpcoes() {
        System.out.println("1. Cadastrar cliente");
        System.out.println("2. Cadastrar conta corrente");
        System.out.println("3. Cadastrar conta especial");
        System.out.println("4. Listar todos os clientes");
        System.out.println("5. Listar todas as contas");
        System.out.println("6. Efetuar um depósito");
        System.out.println("7. Efetuar um saque");
        System.out.println("8. Buscar contas de um cliente");
        System.out.println("9. Reimprimir as opções");
        System.out.println("10. Sair");
        System.out.println("Digite uma opção");

    }

    public static String cadastraCliente(GerenciaClientes gerenciaClientes,
                                        BufferedReader buffer) throws IOException {
        System.out.println("Digite o nome do Cliente");
        String nome = buffer.readLine();
        System.out.println("Digite o CPF do Cliente");
        String cpfString = buffer.readLine();
        Long cpf = new Long(cpfString);

        return gerenciaClientes.cadastraCliente(cpf.longValue(), nome);

    }

    public static String cadastraConta(GerenciaContas gerenciaConta,
                                            GerenciaClientes gerenciaClientes,
                                        BufferedReader buffer) throws IOException {
        System.out.println("Digite o numero da Conta");
        String numeroString = buffer.readLine();

        System.out.println("Digite o valor do depósito, caso queira fazê-lo agora, caso contrário, digite 0");
        String saldoString = buffer.readLine();

        System.out.println("Digite o CPF do Cliente que será o titular da conta");
        String cpfString = buffer.readLine();

        Long cpf = new Long(cpfString);
        Double saldo = new Double(saldoString);
        Integer numero = new Integer(numeroString);
        Cliente cliente = gerenciaClientes.buscaClienteCpf(cpf);

        if (cliente != null) {
            return gerenciaConta.cadastraConta(numero, saldo, cliente);
        } else {
            return "Não foi encontrado nenhum cliente, refaça a operação";

        }

    }

    public static void listaClientes(GerenciaClientes gerenciaClientes) {
           ArrayList<Cliente> clientes = gerenciaClientes.buscaTodosCliente();

           for (Cliente c:clientes)
               System.out.println(c.imprimir());
    }

    public static void listaContas(GerenciaContas gerenciaContas) {
        ArrayList<Conta> contas = gerenciaContas.buscaTodasContas();

        for (Conta c:contas) {
               System.out.println(c.imprmir());
        }
    }

    public static String efetuarDeposito(GerenciaContas gerenciaConta,
                                        BufferedReader buffer) throws IOException {

        System.out.println("Digite o número da conta: ");
        String numeroString = buffer.readLine();

        System.out.println("Digite o valor do depósito: ");
        String quantiaString = buffer.readLine();

        Double quantia = new Double(quantiaString);
        Integer numero = new Integer(numeroString);

        return gerenciaConta.depositar(numero, quantia);
           

    }

    public static String efetuarSaque(GerenciaContas gerenciaConta,
                                        BufferedReader buffer) throws IOException {

        System.out.println("Digite o número da conta: ");
        String numeroString = buffer.readLine();

        System.out.println("Digite o valor do Saque: ");
        String quantiaString = buffer.readLine();

        Double quantia = new Double(quantiaString);
        Integer numero = new Integer(numeroString);
        
        return gerenciaConta.debitar(numero, quantia);

    }

    public static void listarContaCliente(GerenciaContas gerenciaContas,
                                        BufferedReader buffer) throws IOException {

        System.out.println("Digite o CPF do Cliente que será o titular da conta");
        String cpfString = buffer.readLine();

        Long cpf = new Long(cpfString);
        System.out.println(gerenciaContas.buscaTodasContasCliente(cpf));
    }
}
